home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / kcl / akcl / akcl1615.lha / mp / lo-sgi4d.s < prev    next >
Text File  |  1991-06-19  |  761b  |  59 lines

  1.   # Copyright W. Schelter 1991
  2. #ifdef sgi
  3. #include <sys/regdef.h>
  4. #else
  5. #include <regdef.h>
  6. #endif
  7.  
  8.     .text    
  9.     .align    2
  10.  
  11.     .globl    mulul3
  12.  #     MULUL3(x,y,hi)
  13.     .ent    mulul3
  14. mulul3:
  15.     .frame    sp, 0, ra
  16.  
  17.     multu    a0, a1        # [hi:lo] = d * q
  18.     mfhi    a1
  19.     mflo    v0
  20.     sw      a1,0(a2)
  21.     j    ra
  22.     .end    mulul3
  23.  
  24.     .globl    Xdivul3
  25.  #    EXTENDED_DIV(D,H,L,QP,RP)
  26.  #       divul3(x, y, hi)
  27.  #            unsigned int x,h,*hi;
  28. #define lo a0
  29. #define q t7
  30. #define y a1
  31. #define h v1 
  32.  
  33.     .ent    Xdivul3
  34. Xdivul3:
  35.     .frame    sp, 0, ra
  36.  
  37.     lw      h, 0(a2)
  38.     li    v0, 32        # v0 holds number of shifts
  39. loop:
  40.      
  41.     srl    q, lo, 31
  42.     sll    h, 1    
  43.     or    h, q
  44.     sll    lo, 1
  45.     subu    q, h, y    # t = h - d
  46.     bltz    q, underflow
  47.     move    h, q
  48.     or    lo, 1
  49. underflow:
  50.     subu    v0, 1
  51.     bnez    v0, loop
  52.     move    q,a0
  53.     sw    h, 0(a2)    # *rp = h
  54.  #       }
  55.     j    ra
  56.     .end    Xdivul3
  57.  
  58.  
  59.